//Copyright (C) 2000 Microsoft Corporation.  All rights reserved.

//This source code is intended only as a supplement to Microsoft
//Development Tools and/or on-line documentation.  See these other
//materials for detailed information regarding Microsoft code samples.

//THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//PARTICULAR PURPOSE.

namespace Slaks.TextParsing
{
using System;
using System.Drawing;
using System.Drawing.Printing;

using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;


/// <summary>
///    Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
	/// <summary> 
	///    Required designer variable
	/// </summary>
	/// 

	public static Form1 parentWindow;
	private System.ComponentModel.IContainer components;
	private System.Windows.Forms.StatusBar statusBar1;
	private System.Windows.Forms.ImageList imageList1;
	private System.Windows.Forms.ToolBarButton printButton;
	private System.Windows.Forms.ToolBarButton previewButton;
	private System.Windows.Forms.ToolBarButton saveButton;
	private System.Windows.Forms.ToolBarButton openButton;
	private System.Windows.Forms.ToolBarButton newButton;
	private System.Windows.Forms.ToolBar toolBar1;
	private System.Drawing.Printing.PrintDocument printDoc;
		
	private System.Windows.Forms.MenuItem menuItemAbout;
	private System.Windows.Forms.MenuItem menuItemTile;
	private System.Windows.Forms.MenuItem menuItemCascade;
	private System.Windows.Forms.MenuItem menuItemStatusbar;
	private System.Windows.Forms.MenuItem menuItemToolbar;
	private System.Windows.Forms.MenuItem menuItemClearAll;
	private System.Windows.Forms.MenuItem menuItemExit;
	private System.Windows.Forms.MenuItem menuItem16;
	private System.Windows.Forms.MenuItem menuItemPreview;
	private System.Windows.Forms.MenuItem menuItemPrint;
	private System.Windows.Forms.MenuItem menuItem12;
	private System.Windows.Forms.MenuItem menuItemSaveAs;
	private System.Windows.Forms.MenuItem menuItemSave;
	private System.Windows.Forms.MenuItem menuItemClose;
	private System.Windows.Forms.MenuItem menuItemOpen;
	private System.Windows.Forms.MenuItem menuItemNew;
	private System.Windows.Forms.MenuItem menuItemHelp;
	private System.Windows.Forms.MenuItem menuItemWindow;
	private System.Windows.Forms.MenuItem menuItemView;
	private System.Windows.Forms.MenuItem menuItemEdit;
	private System.Windows.Forms.MenuItem menuItemFile;
	private System.Windows.Forms.MainMenu mainMenu1;
	public static int documentCount; // static var which keeps track of the document count
								// This is used in the display of the form views

	public static String fileExtension = ".doc";

	/// <summary>
	///   Constructor
	/// </summary>
	public Form1()
	{        
		parentWindow = this;
		//
		// Required for Win Form Designer support
		//
		InitializeComponent();	
		    documentCount=0;    
			CreateDocument();
	 }

	/// <summary>
	///    Clean up any resources being used
	/// </summary>
	protected override void Dispose( bool disposing )
	{
		if( disposing )
		{
			if (components != null) 
			{
				components.Dispose();
			}
		}
		base.Dispose( disposing );
	}

	/// <summary>
	///    Required method for Designer support - do not modify
	///    the contents of this method with the code editor
	/// </summary>
	private void InitializeComponent()
	{
        this.components = new System.ComponentModel.Container();
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
        this.openButton = new System.Windows.Forms.ToolBarButton();
        this.printDoc = new System.Drawing.Printing.PrintDocument();
        this.menuItemOpen = new System.Windows.Forms.MenuItem();
        this.menuItemClose = new System.Windows.Forms.MenuItem();
        this.menuItemView = new System.Windows.Forms.MenuItem();
        this.menuItemToolbar = new System.Windows.Forms.MenuItem();
        this.menuItemStatusbar = new System.Windows.Forms.MenuItem();
        this.saveButton = new System.Windows.Forms.ToolBarButton();
        this.menuItemHelp = new System.Windows.Forms.MenuItem();
        this.menuItemAbout = new System.Windows.Forms.MenuItem();
        this.menuItemNew = new System.Windows.Forms.MenuItem();
        this.menuItemFile = new System.Windows.Forms.MenuItem();
        this.menuItemSave = new System.Windows.Forms.MenuItem();
        this.menuItemSaveAs = new System.Windows.Forms.MenuItem();
        this.menuItem12 = new System.Windows.Forms.MenuItem();
        this.menuItemPrint = new System.Windows.Forms.MenuItem();
        this.menuItemPreview = new System.Windows.Forms.MenuItem();
        this.menuItemExit = new System.Windows.Forms.MenuItem();
        this.menuItem16 = new System.Windows.Forms.MenuItem();
        this.menuItemEdit = new System.Windows.Forms.MenuItem();
        this.menuItemClearAll = new System.Windows.Forms.MenuItem();
        this.printButton = new System.Windows.Forms.ToolBarButton();
        this.toolBar1 = new System.Windows.Forms.ToolBar();
        this.newButton = new System.Windows.Forms.ToolBarButton();
        this.previewButton = new System.Windows.Forms.ToolBarButton();
        this.imageList1 = new System.Windows.Forms.ImageList(this.components);
        this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
        this.menuItemWindow = new System.Windows.Forms.MenuItem();
        this.menuItemCascade = new System.Windows.Forms.MenuItem();
        this.menuItemTile = new System.Windows.Forms.MenuItem();
        this.statusBar1 = new System.Windows.Forms.StatusBar();
        this.SuspendLayout();
        // 
        // openButton
        // 
        this.openButton.ImageIndex = 1;
        this.openButton.Name = "openButton";
        this.openButton.ToolTipText = "Open";
        // 
        // printDoc
        // 
        this.printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.MDIPrintPage);
        // 
        // menuItemOpen
        // 
        this.menuItemOpen.Index = 1;
        this.menuItemOpen.Text = "Open...";
        this.menuItemOpen.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemClose
        // 
        this.menuItemClose.Index = 2;
        this.menuItemClose.Text = "Close";
        this.menuItemClose.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemView
        // 
        this.menuItemView.Index = 2;
        this.menuItemView.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItemToolbar,
            this.menuItemStatusbar});
        this.menuItemView.Text = "View";
        // 
        // menuItemToolbar
        // 
        this.menuItemToolbar.Checked = true;
        this.menuItemToolbar.Index = 0;
        this.menuItemToolbar.Text = "Toolbar";
        this.menuItemToolbar.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemStatusbar
        // 
        this.menuItemStatusbar.Checked = true;
        this.menuItemStatusbar.Index = 1;
        this.menuItemStatusbar.Text = "Status Bar";
        this.menuItemStatusbar.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // saveButton
        // 
        this.saveButton.ImageIndex = 2;
        this.saveButton.Name = "saveButton";
        this.saveButton.ToolTipText = "Save";
        // 
        // menuItemHelp
        // 
        this.menuItemHelp.Index = 4;
        this.menuItemHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItemAbout});
        this.menuItemHelp.Text = "Help";
        // 
        // menuItemAbout
        // 
        this.menuItemAbout.Index = 0;
        this.menuItemAbout.Text = "AboutText parsing and extraction utility";
        this.menuItemAbout.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemNew
        // 
        this.menuItemNew.Index = 0;
        this.menuItemNew.Text = "New";
        this.menuItemNew.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemFile
        // 
        this.menuItemFile.Index = 0;
        this.menuItemFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItemNew,
            this.menuItemOpen,
            this.menuItemClose,
            this.menuItemSave,
            this.menuItemSaveAs,
            this.menuItem12,
            this.menuItemPrint,
            this.menuItemPreview,
            this.menuItemExit});
        this.menuItemFile.Text = "File";
        // 
        // menuItemSave
        // 
        this.menuItemSave.Index = 3;
        this.menuItemSave.Text = "Save";
        this.menuItemSave.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemSaveAs
        // 
        this.menuItemSaveAs.Index = 4;
        this.menuItemSaveAs.Text = "Save As...";
        this.menuItemSaveAs.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItem12
        // 
        this.menuItem12.Index = 5;
        this.menuItem12.Text = "-";
        // 
        // menuItemPrint
        // 
        this.menuItemPrint.Index = 6;
        this.menuItemPrint.Text = "Print...";
        this.menuItemPrint.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemPreview
        // 
        this.menuItemPreview.Index = 7;
        this.menuItemPreview.Text = "Print Preview";
        this.menuItemPreview.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemExit
        // 
        this.menuItemExit.Index = 8;
        this.menuItemExit.Text = "Exit";
        this.menuItemExit.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItem16
        // 
        this.menuItem16.Index = -1;
        this.menuItem16.Text = "-";
        // 
        // menuItemEdit
        // 
        this.menuItemEdit.Index = 1;
        this.menuItemEdit.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItemClearAll});
        this.menuItemEdit.Text = "Edit";
        // 
        // menuItemClearAll
        // 
        this.menuItemClearAll.Index = 0;
        this.menuItemClearAll.Text = "Clear All";
        this.menuItemClearAll.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // printButton
        // 
        this.printButton.ImageIndex = 4;
        this.printButton.Name = "printButton";
        this.printButton.ToolTipText = "Print";
        // 
        // toolBar1
        // 
        this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] {
            this.newButton,
            this.openButton,
            this.saveButton,
            this.previewButton,
            this.printButton});
        this.toolBar1.DropDownArrows = true;
        this.toolBar1.ImageList = this.imageList1;
        this.toolBar1.Location = new System.Drawing.Point(0, 0);
        this.toolBar1.Name = "toolBar1";
        this.toolBar1.ShowToolTips = true;
        this.toolBar1.Size = new System.Drawing.Size(968, 28);
        this.toolBar1.TabIndex = 1;
        this.toolBar1.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.toolBar1_ButtonClick);
        // 
        // newButton
        // 
        this.newButton.ImageIndex = 0;
        this.newButton.Name = "newButton";
        this.newButton.ToolTipText = "New";
        // 
        // previewButton
        // 
        this.previewButton.ImageIndex = 3;
        this.previewButton.Name = "previewButton";
        this.previewButton.ToolTipText = "Print Preview";
        // 
        // imageList1
        // 
        this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
        this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
        this.imageList1.Images.SetKeyName(0, "");
        this.imageList1.Images.SetKeyName(1, "");
        this.imageList1.Images.SetKeyName(2, "");
        this.imageList1.Images.SetKeyName(3, "");
        this.imageList1.Images.SetKeyName(4, "");
        this.imageList1.Images.SetKeyName(5, "");
        // 
        // mainMenu1
        // 
        this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItemFile,
            this.menuItemEdit,
            this.menuItemView,
            this.menuItemWindow,
            this.menuItemHelp});
        // 
        // menuItemWindow
        // 
        this.menuItemWindow.Index = 3;
        this.menuItemWindow.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItemCascade,
            this.menuItemTile});
        this.menuItemWindow.Text = "Window";
        // 
        // menuItemCascade
        // 
        this.menuItemCascade.Index = 0;
        this.menuItemCascade.Text = "Cascade";
        this.menuItemCascade.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // menuItemTile
        // 
        this.menuItemTile.Index = 1;
        this.menuItemTile.Text = "Tile";
        this.menuItemTile.Click += new System.EventHandler(this.MenuItemHandler);
        // 
        // statusBar1
        // 
        this.statusBar1.Font = new System.Drawing.Font("Arial", 8F);
        this.statusBar1.Location = new System.Drawing.Point(0, 713);
        this.statusBar1.Name = "statusBar1";
        this.statusBar1.Size = new System.Drawing.Size(968, 16);
        this.statusBar1.TabIndex = 2;
        this.statusBar1.Text = "For Help,  press F1";
        // 
        // Form1
        // 
        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
        this.ClientSize = new System.Drawing.Size(968, 729);
        this.Controls.Add(this.toolBar1);
        this.Controls.Add(this.statusBar1);
        this.IsMdiContainer = true;
        this.Menu = this.mainMenu1;
        this.Name = "Form1";
        this.Text = "Text Parsing and Extraction Utility (Porter)";
        this.Closing += new System.ComponentModel.CancelEventHandler(this.ClosingMainAppHandler);
        this.ResumeLayout(false);
        this.PerformLayout();

	}

	//Handle the Menu Item clicks
	private void MenuItemHandler(object sender, System.EventArgs e)
	{
		if(sender == menuItemNew)	
		{
			New();
		}
		else if(sender == menuItemOpen)
		{
			Open();
		}
		else if(sender == menuItemSave)
		{
			Save();
		}
		else if(sender == menuItemPreview)
		{
			PrintPreview();
		}
		else if(sender == menuItemPrint)
		{
			Print();
		}
		else if(sender == menuItemAbout)
		{
			AboutHelp();
		}
		else if(sender == menuItemExit)
		{
			Exit();
		}
		else if(sender == menuItemClose)
		{
			CloseView();
		}
		else if(sender == menuItemTile)
		{
			Tile();
		}
		else if(sender == menuItemCascade)
		{
			Cascade();
		}
		else if(sender == menuItemClearAll)
		{
			Clear();
		}
		else if(sender == menuItemSaveAs)
		{
			Save();
		}
		else if(sender == menuItemToolbar)
		{
			toolBar1.Visible  = menuItemToolbar.Checked  = !toolBar1.Visible ;
		}
		else if(sender == menuItemStatusbar)
		{
			statusBar1.Visible = menuItemStatusbar.Checked = !statusBar1.Visible;			
		}
	}

	//Handle the Toolbar button clicks
	 private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
	{
		if(e.Button == newButton)	
		{
			New();
		}
		else if(e.Button==openButton)
		{
			Open();
		}
		else if(e.Button==saveButton)
		{
			Save();
		}
		else if(e.Button == previewButton)
		{
			PrintPreview();
		}
		else if(e.Button == printButton)
		{
			Print();
		}
	}

	//About Help
	private void AboutHelp()
	{
		MessageBox.Show("Text parsing and extraction utility Version 1.0\nKisilevich Slava\nMarkov Alex\nBen-Gurion University 2005", "About Text parsing and extraction utility");
	}


	//Print
	private void Print()
	{
		try 
		{			
			printDoc.Print();
		} 
		catch(Exception e)
		{
			MessageBox.Show(e.ToString());
		}
        
	}

	//PrintPage event handler
	private void MDIPrintPage(object sender,PrintPageEventArgs ev)
	{
		try{
			MDIView activeView = (MDIView)this.ActiveMdiChild;
			MDIDoc activeDoc = activeView.GetDocument();		

			// TODO
			// add graphic commands here, for instance ev.Graphics....



			ev.HasMorePages = false;
		}

		catch (Exception ex)
		{
			MessageBox.Show(ex.ToString());
		}
	}


	//PrintPreview
	private void PrintPreview()
	{
		try
		{		
			PrintPreviewDialog prevDlg = new PrintPreviewDialog();
			prevDlg.Document = printDoc;
			prevDlg.Size = new System.Drawing.Size(600, 329);
			prevDlg.ShowDialog();
		}
		catch(Exception ex)
		{
			MessageBox.Show(ex.ToString());
		}
		
	}

	//Exit
	private void Exit()
	{
		Form[] childForm = this.MdiChildren ;
		//Make sure to ask for saving the doc before exiting the app
		for(int i=0; i < childForm.Length ; i++)
			childForm[i].Close();

		Application.Exit();
		
	}

	//Close the View
	private  void CloseView()
	{
		MDIView activeView = (MDIView)this.ActiveMdiChild;
		activeView.Close();		
	}

	//Tile
	private void Tile()
	{
		this.LayoutMdi(MdiLayout.TileHorizontal);
		
	}

	//Cascade
	private void Cascade()
	{
		this.LayoutMdi(MdiLayout.Cascade);
		
	}

	//Clear the contents of the active document
	private void Clear()
	{
		MDIView activeView = (MDIView)this.ActiveMdiChild;
		if(activeView != null)
		{
			MDIDoc activeDoc = activeView.GetDocument();
			activeDoc.DeleteContents();
		}
	}
	
	//Open an existing document
	private void Open()
	{
		OpenFileDialog openDlg = new OpenFileDialog();
		openDlg.Filter  = "MDI Files (*" + fileExtension + ")|*" + fileExtension + "|All Files (*.*)|*.*";
		openDlg.FileName = "" ;
		openDlg.DefaultExt = fileExtension;
		openDlg.CheckFileExists = true;
		openDlg.CheckPathExists = true;
		
		DialogResult res = openDlg.ShowDialog ();
		
		if(res == DialogResult.OK)
		{
			if( !(openDlg.FileName).EndsWith(fileExtension) && 
				!(openDlg.FileName).EndsWith(fileExtension.ToUpper())) 
				MessageBox.Show("Unexpected file format","MDI App",MessageBoxButtons.OK );
			else
			{
				if(this.ActiveMdiChild == null)			
					EnableItems();		
			
				MDIDoc newDoc = CreateDocument();
				newDoc.OpenDocument(openDlg.FileName);
			}
		}		
		
	}

	//Save the document
	private void Save()
	{
		MDIView selectedView = (MDIView)this.ActiveMdiChild ;
		SaveFileDialog saveDlg = new SaveFileDialog();
		saveDlg.Filter = "MDI Files (*"+ fileExtension +")|*"+ fileExtension + "|All Files (*.*)|*.*";
		saveDlg.DefaultExt = fileExtension;
		DialogResult res = saveDlg.ShowDialog ();
		
		if(res == DialogResult.OK)
			selectedView.GetDocument().SaveDocument(saveDlg.FileName);		

	}

	//Open new document
	private void New()
	{		
		//If this is the first child window, enable the Menu and Toolbar items
		if(this.ActiveMdiChild == null)
			EnableItems();
		CreateDocument();						
	}
    
	//Creates a new document
	private MDIDoc CreateDocument()
	{
		MDIDoc newDoc = new MDIDoc (parentWindow);
		documentCount++;
		return newDoc;
	}


	//Disable the menu and toolbar items when there is no active child form
	public void DisableItems()
	{
		this.menuItemEdit.Visible=false;
		this.menuItemWindow.Visible=false;
		this.menuItemClose.Visible=false;
		this.menuItemSave.Visible=false;
		this.menuItemSaveAs.Visible=false;
		this.menuItemPrint.Visible=false;
		this.menuItemPreview.Visible=false;
		this.saveButton.Enabled= false;
		this.previewButton.Enabled=false;
		this.printButton.Enabled=false;
					
	}

	//Enable the menu and toolbar items when the first child form is created
	public void EnableItems()
	{
		this.menuItemEdit.Visible=true;
		this.menuItemWindow.Visible=true;
		this.menuItemClose.Visible=true;
		this.menuItemSave.Visible=true;
		this.menuItemSaveAs.Visible=true;
		this.menuItemPrint.Visible=true;
		this.menuItemPreview.Visible=true;
		this.saveButton.Enabled= true;
		this.previewButton.Enabled=true;
		this.printButton.Enabled=true;
					
	}

	//App closing handler
	public void ClosingMainAppHandler(Object sender,CancelEventArgs e)
	{
		this.Exit();		
	}

	/*
	* The main entry point for the application.
    *
    */
	[STAThread]
	public static void Main(string[] args) 
	{
	Application.Run(new Form1());
	}
}
}
